// A class definition for picking purposes and copying base data to the character.
struct EnemyData;

// Read-only definitions created statically.
struct CharacterClass
{
	const char		*ClassName;
};

// Character data structure
struct CharacterData
{
	edict_t			*Player; // round-about pointer back to the player

// Data here should never be modified directly; functions are created
// in Character.cpp for the express purpose of modifying this data safely.
	uint8			Level;
	uint64			Experience;
	uint64			NextLevelExperience;

	Party			*Party;
	EnemyData		*SelectedDrone;
};

void Character_Init(CharacterData *character, edict_t *player);
void Character_Destroy(CharacterData *character);
uint64 Character_CalculateExperienceForLevel(CharacterData *character, uint8 level);
bool Character_SetExperience(CharacterData *character, uint64 wantedExperience);
bool Character_IncreaseExperience(CharacterData *character, uint64 addedExperience);
void Character_SetLevel(CharacterData *character, uint8 newLevel);
byte Characters_GetAverageLevel();